Pinvon's Blog

所见, 所闻, 所思, 所想

UML

概述

UML 是一种为面向对象开发系统的产品进行说明, 可视化, 编制文档的模型语言, 使开发人员专注于建立产品的模型和结构, 而不是选择程序语言和算法实现.

UML 的核心是图表, 大致可以将这些图表归类为结构图和行为图.

  • 结构图. 由类图, 对象图, 部署图, 包图, 复合结构图, 组件图等静态图组成;
  • 行为图. 由活动图, 交互图, 用例图等动态图组成.

要掌握 UML 模型, 首先要了解 UML 构建模块.

UML 构建模块

事物

事物是实体抽象化的最终结果, 是 UML 构建块中最重要的组成部分. 事物分类如下:

  • 结构事物
  • 行为事物
  • 分组事物
  • 注释事物

结构事物

结构事物是模型中的静态部分, 用来呈现概念或实体的表现元素, 是软件建模中最常见的元素.

类. 具有相同属性, 方法, 关系, 语义的对象的集合. 用矩形表示.

接口. 类或组件所提供的服务, 描述了类或组件对外可见的动作的组合. 用圆形表示.

协作. 定义元素之间的相互作用. 用虚线椭圆表示.

用例. 定义了用户和系统的交互, 即一个操作. 用实线椭圆表示.

组件. 描述系统的一部分.

节点. 系统运行时所存在的物理元素, 如服务器. 用立方体表示.

行为事物

行为事物是指 UML 模型中的动态部分, 表示模型随着时空不断变化的部分.

交互. 一种行为. 用带箭头的直线表示.

状态机. 由一系列对象的状态组成, 一个对象在其生命周期的状态是很重要的. 用圆角矩形表示.

分组事物

目前只有一种分组事物, 即包(package). 分组事物可以看成是一个盒子, 模型可以在其中被分解. 符号类似于文件夹的图标.

1.png

注释事物

对 UML 模型元素的解释说明. 用折起一个角的矩形表示.

关系

显示元素是如何彼此相关联的.

依赖关系

依赖是指两个事物之间的联系, 其中一个事物的变化会影响到另一个事物. 用带虚线的箭头表示.

关联

类与类之间的联结, 使一个类知道另一个类的属性和方法. 用带实绩的箭头表示. 在 C++ 中, 类 B 的成员变量中有类 A 的对象, 则 A 与 B 之间有关联, 并且箭头指向 A.

聚合

与关联类似, 但是关联主要表示在同一层次上, 而聚合则是整体与部分之间的关系, 但在 C++ 语法上无法区分, 都是通过成员变量来实现.

图标: 带实线的箭头, 另一边是空心的菱形.

组合

属于关联的特殊情况, 也体现了整体与部分之间的关系, 整体与部分拥有相同的生命周期.

与聚合的区别: 聚合关系中, 整体与部分之间没有相同的生命周期, 如部门不存在了, 但员工还可以继续存在; 组合则有相同的生命周期, 如部门不存在了, 员工也不再存在. 一般会先画成聚合关系, 后期发现确定是组合关系, 才会将空心菱形转成实心菱形.

图标: 带实线的箭头, 另一边是实心的菱形.

协作

描述一组对象之间连接的结构关系, 如聚合关系(描述整体与部分之间的结构关系), 使用带虚线的双向箭头表示.

泛化

描述了对象世界中的继承关系, 是一种一般化-特殊化的关系. 用带实线的空心三角形表示.

实现

类之间的语义关系, 其中一个类指定了由另一个类保证执行的契约. 使用带虚线的空心三角形表示.

泛化表示类与类之间的继承关系, 接口与接口之间的继承关系.

实现表示类对接口的实现.

图是事物集合的分类, UML 中包含多种图:

  • 类图. 描述系统所包含的类, 类的内部结构及类之间的关系;
  • 对象图. 类图的一个具体实例;
  • 用例图. 从用户的角度出发描述系统的功能和需求, 展示系统外部的各类角色与系统内部的各种用例之间的关系;
  • 顺序图. 表示对象之间动态合作的关系;
  • 协作图. 描述对象之间的协作关系;
  • 活动图. 描述系统中各种活动的执行顺序;
  • 状态图. 描述一类对象的所有可能的状态以及事件发生时状态的转移条件;
  • 部署关系图. 定义系统中软硬件的物理体系结构;
  • 组件图. 描述代码部件的物理结构以及各部件之间的依赖关系.

UML 视图

视图用来表示被建模系统的各个方面, 由多个图构成.

如果要为系统建立一个完整的模型图, 只需定义多个视图, 每个视图表示系统的一个方面即可.

类图

0.png

  • 图中有 Student 和 Course 两个类
  • + 表示 public, - 表示 private, # 表示 protected
  • 成员变量的类型在前, 名称在后
  • 函数的参数, 名称在前, 类型在后, 返回值类型最后
  • 两个类之间若存在关系, 可以使用箭头进行关联
  • 1 表示一个, 0..* 表示 0 个到无限个

对象图

2.png

对象图与类图类似. 区别在于:

  • 对象名称形式为"对象名:类名"加下划线
  • 属性具有值
  • 不包括函数, 因为同一个类的对象, 操作都一样

组件图

部署图

用例图

交互图

序列图

3.png

状态图

活动图

4.png

Comments

使用 Disqus 评论
comments powered by Disqus